package com.wang.elasticsearchstudy.goods.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.io.Serializable;

/**
 * @Document：标注在类上，可以指定indexName、type、shards、replicas等
 * @Id：成员变量，主键
 * @Field：成员变量，标记为文档字段并指定字段映射属性 type：字段类型
 * Text：存储数据时，自动分词并生成索引
 * Keyword：存储数据时，不会分词生成索引
 * Numerical：数值类型
 * 基本数值类型：long、integer、short、Byte、double、float、half_float
 * 浮点数的高精度类型：scaled_float，需要指定精度因子，es会把真实值乘以这个因子后存储，取出时候再还原
 * Date：日期类型，es可以对日期格式化为字符串存储，但是我们建议使用long存储毫秒类型数据，节约空间
 * analyzer：指定分词器
 * index：是否索引，默认true
 * store：是否存储，默认false
 */
@Document(indexName = "goods", type = "docs", shards = 1, replicas = 0)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Goods implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    private Long id;

    @Field(type = FieldType.Text, analyzer = "ik_max_word")
    private String title; //标题
    @Field(type = FieldType.Keyword)
    private String category;// 分类
    @Field(type = FieldType.Keyword, fielddata = true)
    private String brand; // 品牌
    @Field(type = FieldType.Double)
    private Double price; // 价格
    @Field(index = false, type = FieldType.Keyword)
    private String images; // 图片地址
}
